home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / utility3 / what.zip / SETUPAPI.IN_ / SETUPAPI.bin
Text File  |  1992-02-09  |  55KB  |  1,801 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.     '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  174. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  175. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  176. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  177. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  179. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  180. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  182. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  183. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  184. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  185. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  186. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  187. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  188. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  189. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  191. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  192. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  193. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  194. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  195. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  196.  
  197.  
  198.  
  199. '*************************************************************************
  200. '****************  Setup Basic Wrapper Declarations  *********************
  201. '*************************************************************************
  202.  
  203.  
  204. ''shell
  205.  
  206. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  207. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  208. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  209. DECLARE SUB UIPop (n%)
  210. DECLARE SUB UIPopAll
  211. DECLARE SUB SetTitle (sz$)
  212. DECLARE SUB ReadInfFile (szFile$)
  213. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  214. DECLARE SUB RemoveSymbol (szSym$)
  215. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  216. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  217. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  218. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  219. DECLARE SUB AddListItem(szSymbol$, szItem$)
  220. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  221.  
  222. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  223. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  224.  
  225. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  226. DECLARE SUB RestoreCursor (hPrev%)
  227.  
  228. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  229. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  230.  
  231. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  232. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  233. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  234. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  235.  
  236. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  237. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  238. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  239. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  240.  
  241.  
  242. ''install
  243.  
  244.  
  245. DECLARE SUB CreateDir (szDir$, cmo%)
  246. DECLARE SUB RemoveDir (szDir$, cmo%)
  247. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  248. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  249. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  250. DECLARE SUB CopyFilesInCopyList
  251. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  252. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  253. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  254. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  255. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  256. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  257. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  258. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  259. DECLARE SUB DumpCopyList (szFile$)
  260. DECLARE SUB ClearCopyList
  261. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  262. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  263. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  264. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  265. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  266. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  267. DECLARE SUB InitInstall
  268. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  269. DECLARE SUB AddBlankToBillboardList (lTicks&)
  270. DECLARE SUB ClearBillboardList
  271. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  272. DECLARE SUB CloseLogFile
  273. DECLARE SUB WriteToLogFile (szStr$)
  274. DECLARE SUB SetCopyGaugePosition (x%, y%)
  275. DECLARE SUB SetRestartDir(szDir$)
  276. DECLARE FUNCTION RestartListEmpty AS INTEGER
  277. DECLARE FUNCTION ExitExecRestart AS INTEGER
  278. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  279. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  280. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  281. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  282. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  283.  
  284.  
  285. '' Error Handling
  286.  
  287. '$ifdef DEBUG
  288.  
  289. '' Setup API Errors
  290. CONST saeFail   = 0
  291. CONST saeInit   = 1
  292. CONST saeNYI    = 3
  293. CONST saeArg    = 4    ''must be max sae value
  294.  
  295. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  296. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  297.  
  298. '' chk arg
  299. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  300. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  301. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  302. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  303.  
  304. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  305. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  306.  
  307. '$endif ''DEBUG
  308.  
  309.  
  310.  
  311. '' Windows system detect
  312.  
  313. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  314. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  315. DECLARE FUNCTION GetWindowsMode AS INTEGER
  316. DECLARE FUNCTION GetWindowsDir  AS STRING
  317. DECLARE FUNCTION GetWindowsSysDir AS STRING
  318. DECLARE FUNCTION IsWindowsShared AS INTEGER
  319. DECLARE FUNCTION GetScreenWidth AS INTEGER
  320. DECLARE FUNCTION GetScreenHeight AS INTEGER
  321.  
  322.  
  323. '*************************************************************************
  324. '*****************  Setup Basic Wrapper Definitions  *********************
  325. '*************************************************************************
  326. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  327.     fFrameInit = 0
  328.     fInstallInit = 0
  329.  
  330.     IF hSetup > 0 THEN
  331. '$ifdef DEBUG
  332.         StfApiErr saeInit, "InitSetup", szCmdLine$
  333. '$endif ''DEBUG
  334.     END IF
  335.  
  336.     i% = InitFrame(szCmdLine$)
  337.     fFrameInit = 1
  338.  
  339.     InitInstall
  340.     fInstallInit = 1
  341.  
  342.     InitSetup = i%
  343. END FUNCTION
  344.  
  345.  
  346.  
  347. '**************************************************************************
  348. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  349.     IF hSetup > 0 THEN
  350. '$ifdef DEBUG
  351.         StfApiErr saeInit, "InitFrame", szCmdLine$
  352. '$endif ''DEBUG
  353.     ELSE
  354.         i% = InitializeFrame(szCmdLine$)
  355.         IF (i% = 0) OR (i% = -1) THEN
  356. '$ifdef DEBUG
  357.             StfApiErr saeFail, "InitFrame", szCmdLine$
  358. '$endif ''DEBUG
  359.             END
  360.         ELSE
  361.             InitFrame = i%
  362.         END IF
  363.     END IF
  364. END FUNCTION
  365.  
  366.  
  367. '**************************************************************************
  368. SUB SetBitmap(szDll$, Bitmap%) STATIC
  369.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  370. '$ifdef DEBUG
  371.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  372. '$endif ''DEBUG
  373.         ERROR STFERR
  374.     END IF
  375. END SUB
  376.  
  377.  
  378. '**************************************************************************
  379. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  380.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  381. '$ifdef DEBUG
  382.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  383. '$endif ''DEBUG
  384.         ERROR STFERR
  385.     END IF
  386. END SUB
  387.  
  388.  
  389. '*************************************************************************
  390. SUB SetTitle(sz$) STATIC
  391.     SetWindowText HwndFrame(), sz$
  392. END SUB
  393.  
  394.  
  395. '*************************************************************************
  396. SUB ReadInfFile (szFile$) STATIC
  397. '$ifdef DEBUG
  398.     if FValidFATPath(szFile$) = 0 then
  399.         BadArgErr 1, "ReadInfFile", szFile$
  400.     end if
  401.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  402.         StfApiErr saeFail, "ReadInfFile", szFile$
  403. '$else  ''!DEBUG
  404.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  405. '$endif ''!DEBUG
  406.         ERROR STFERR
  407.     END IF
  408. END SUB
  409.  
  410.  
  411. '*************************************************************************
  412. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  413. '$ifdef DEBUG
  414.     if szDll$ = "" then
  415.         n% = 1
  416.     elseif szDlgProc$ = "" then
  417.         n% = 3
  418.     else
  419.         n% = 0
  420.     end if
  421.     if n% > 0 then
  422.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  423.     end if
  424. '$endif ''DEBUG
  425.  
  426.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  427. '$ifdef DEBUG
  428.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  429. '$endif ''DEBUG
  430.         ERROR STFERR
  431.     ELSE
  432.         UIStartDlg = GetSymbolValue("DLGEVENT")
  433.     END IF
  434. END FUNCTION
  435.  
  436.  
  437. '*************************************************************************
  438. SUB UIPop (n%) STATIC
  439.     IF FKillNDialogs(n%) = 0 THEN
  440. '$ifdef DEBUG
  441.         StfApiErr saeFail, "UIPop", STR$(n%)
  442. '$endif ''DEBUG
  443.         ERROR STFERR
  444.     END IF
  445. END SUB
  446.  
  447.  
  448. '*************************************************************************
  449. SUB UIPopAll STATIC
  450.     IF FKillNDialogs(65535) = 0 THEN
  451. '$ifdef DEBUG
  452.         StfApiErr saeFail, "UIPopAll", ""
  453. '$endif ''DEBUG
  454.         ERROR STFERR
  455.     END IF
  456. END SUB
  457.  
  458.  
  459. '*************************************************************************
  460. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  461. '$ifdef DEBUG
  462.     if szSymbol$ = "" then
  463.         BadArgErr 1, "GetSymbolValue", szSymbol$
  464.     end if
  465. '$endif ''DEBUG
  466.     szValue$ = string$(cbSymValMax,32)
  467.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  468.     GetSymbolValue = szValue$
  469.     IF Length% >= cbSymValMax THEN
  470.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  471.         ERROR STFERR
  472.     END IF
  473.     IF szSymbol$ = "" THEN
  474.         ERROR STFERR
  475.     END IF
  476.     szValue$ = ""
  477. END FUNCTION
  478.  
  479.  
  480. '*************************************************************************
  481. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  482. '$ifdef DEBUG
  483.     if szSymbol$ = "" then
  484.         BadArgErr 1, "GetListLength", szSymbol$
  485.     end if
  486. '$endif ''DEBUG
  487.     GetListLength = UsGetListLength(szSymbol$)
  488.     IF szSymbol$ = "" THEN
  489.         ERROR STFERR
  490.     END IF
  491. END FUNCTION
  492.  
  493.  
  494. '*************************************************************************
  495. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  496. '$ifdef DEBUG
  497.     if szListSymbol$ = "" then
  498.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  499.     end if
  500.  
  501.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  502.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  503.     end if
  504. '$endif ''DEBUG
  505.  
  506.     szListItem$ = string$(cbSymValMax,32)
  507.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  508.     GetListItem = szListItem$
  509.     IF Length% >= cbSymValMax THEN
  510.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  511.         ERROR STFERR
  512.     END IF
  513.     IF szListSymbol$ = "" THEN
  514.         ERROR STFERR
  515.     END IF
  516.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  517.         ERROR STFERR
  518.     end if
  519.     szListItem$ = ""
  520. END FUNCTION
  521.  
  522.  
  523. '*************************************************************************
  524. SUB AddListItem(szSymbol$, szItem$) STATIC
  525. '$ifdef DEBUG
  526.     if szSymbol$ = "" then
  527.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  528.     end if
  529. '$endif ''DEBUG
  530.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  531. '$ifdef DEBUG
  532.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  533. '$endif ''DEBUG
  534.         ERROR STFERR
  535.     END IF
  536. END SUB
  537.  
  538.  
  539. '*************************************************************************
  540. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  541. '$ifdef DEBUG
  542.     if szSymbol$ = "" then
  543.         nArg% = 1
  544.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  545.         nArg% = 2
  546.     else
  547.         nArg% = 0
  548.     end if
  549.     if nArg% > 0 then
  550.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  551.     end if
  552. '$endif ''DEBUG
  553.  
  554.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  555. '$ifdef DEBUG
  556.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  557. '$endif ''DEBUG
  558.         ERROR STFERR
  559.     END IF
  560. END SUB
  561.  
  562.  
  563. '**************************************************************************
  564. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  565. '$ifdef DEBUG
  566.     if szSymbol$ = "" then
  567.         n% = 1
  568.     elseif FValidInfSect(szSect$) = 0 then
  569.         n% = 2
  570.     else
  571.         n% = 0
  572.     end if
  573.     if n% > 0 then
  574.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  575.     end if
  576. '$endif ''DEBUG
  577.  
  578.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  579. '$ifdef DEBUG
  580.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  581. '$endif ''DEBUG
  582.         ERROR STFERR
  583.     END IF
  584. END SUB
  585.  
  586.  
  587. '*************************************************************************
  588. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  589. '$ifdef DEBUG
  590.     if szSymbol$ = "" then
  591.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  592.     end if
  593. '$endif ''DEBUG
  594.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  595. '$ifdef DEBUG
  596.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  597. '$endif ''DEBUG
  598.         ERROR STFERR
  599.     END IF
  600. END SUB
  601.  
  602.  
  603. '*************************************************************************
  604. SUB RemoveSymbol(szSym$) STATIC
  605. '$ifdef DEBUG
  606.     if szSym$ = "" then
  607.         BadArgErr 1, "RemoveSymbol", szSym$
  608.     end if
  609. '$endif ''DEBUG
  610.     IF FRemoveSymbol(szSym$) = 0 THEN
  611. '$ifdef DEBUG
  612.         StfApiErr saeFail, "RemoveSymbol", szSym$
  613. '$endif ''DEBUG
  614.         ERROR STFERR
  615.     END IF
  616. END SUB
  617.  
  618.  
  619. '*************************************************************************
  620. FUNCTION ShowWaitCursor STATIC AS INTEGER
  621.     ShowWaitCursor = HShowWaitCursor
  622. END FUNCTION
  623.  
  624.  
  625. '*************************************************************************
  626. SUB RestoreCursor (hPrev%) STATIC
  627.     i% = FRestoreCursor(hPrev%)
  628.     IF i% = 0 THEN
  629. '$ifdef DEBUG
  630.         StfApiErr saeFail, "RestoreCursor", ""
  631. '$endif ''DEBUG
  632.         ERROR STFERR
  633.     END IF
  634. END SUB
  635.  
  636.  
  637. '*************************************************************************
  638. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  639.     SetBeepingMode = FSetBeepingMode(mode%)
  640. END FUNCTION
  641.  
  642.  
  643. '*************************************************************************
  644. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  645.     SetSilentMode = FSetSilent(mode%)
  646. END FUNCTION
  647.  
  648.  
  649. '*************************************************************************
  650. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  651. '$ifdef DEBUG
  652.     if FValidInfSect(szSect$) = 0 then
  653.         n% = 1
  654.     elseif szKey$ = "" then
  655.         n% = 2
  656.     else
  657.         n% = 0
  658.     end if
  659.     if n% > 0 then
  660.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  661.     end if
  662. '$endif ''DEBUG
  663.  
  664.     szBuf$ = string$(128, 32)
  665.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  666.     IF Length% >= 128 THEN
  667.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  668.         ERROR STFERR
  669.     END IF
  670.  
  671.     IF Length% = -1 THEN
  672. '$ifdef DEBUG
  673.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  674. '$endif ''DEBUG
  675.         ERROR STFERR
  676.     END IF
  677.  
  678.     GetSectionKeyDate = szBuf$
  679.     szBuf$ = ""
  680. END FUNCTION
  681.  
  682.  
  683. '*************************************************************************
  684. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  685. '$ifdef DEBUG
  686.     if FValidInfSect(szSect$) = 0 then
  687.         n% = 1
  688.     elseif szKey$ = "" then
  689.         n% = 2
  690.     else
  691.         n% = 0
  692.     end if
  693.     if n% > 0 then
  694.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  695.     end if
  696. '$endif ''DEBUG
  697.  
  698.     szBuf$ = string$(128, 32)
  699.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  700.     IF Length% >= 128 THEN
  701.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  702.         ERROR STFERR
  703.     END IF
  704.  
  705.     IF Length% = -1 THEN
  706. '$ifdef DEBUG
  707.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  708. '$endif ''DEBUG
  709.         ERROR STFERR
  710.     END IF
  711.  
  712.     GetSectionKeyFilename = szBuf$
  713.     szBuf$ = ""
  714. END FUNCTION
  715.  
  716.  
  717. '*************************************************************************
  718. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  719. '$ifdef DEBUG
  720.     if FValidInfSect(szSect$) = 0 then
  721.         n% = 1
  722.     elseif szKey$ = "" then
  723.         n% = 2
  724.     else
  725.         n% = 0
  726.     end if
  727.     if n% > 0 then
  728.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  729.     end if
  730. '$endif ''DEBUG
  731.  
  732.     szBuf$ = string$(128, 32)
  733.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  734.     IF Length% >= 128 THEN
  735.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  736.         ERROR STFERR
  737.     END IF
  738.  
  739.     IF Length% = -1 THEN
  740. '$ifdef DEBUG
  741.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  742. '$endif ''DEBUG
  743.         ERROR STFERR
  744.     END IF
  745.  
  746.     GetSectionKeySize = VAL(szBuf$)
  747.     szBuf$ = ""
  748. END FUNCTION
  749.  
  750.  
  751. '*************************************************************************
  752. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  753. '$ifdef DEBUG
  754.     if FValidInfSect(szSect$) = 0 then
  755.         n% = 1
  756.     elseif szKey$ = "" then
  757.         n% = 2
  758.     else
  759.         n% = 0
  760.     end if
  761.     if n% > 0 then
  762.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  763.     end if
  764. '$endif ''DEBUG
  765.  
  766.     szBuf$ = string$(128, 32)
  767.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  768.     IF Length% >= 128 THEN
  769.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  770.         ERROR STFERR
  771.     END IF
  772.  
  773.     IF Length% = -1 THEN
  774. '$ifdef DEBUG
  775.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  776. '$endif ''DEBUG
  777.         ERROR STFERR
  778.     END IF
  779.  
  780.     GetSectionKeyVersion = szBuf$
  781.     szBuf$ = ""
  782. END FUNCTION
  783.  
  784.  
  785. '*************************************************************************
  786. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  787. '$ifdef DEBUG
  788.     if szSym$ = "" then
  789.         n% = 1
  790.     elseif FValidInfSect(szSect$) = 0 then
  791.         n% = 2
  792.     else
  793.         n% = 0
  794.     end if
  795.     if n% > 0 then
  796.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  797.     end if
  798. '$endif ''DEBUG
  799.  
  800.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  801. '$ifdef DEBUG
  802.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  803. '$endif ''DEBUG
  804.         ERROR STFERR
  805.     END IF
  806. END SUB
  807.  
  808.  
  809. '*************************************************************************
  810. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  811. '$ifdef DEBUG
  812.     if szSym$ = "" then
  813.         n% = 1
  814.     elseif FValidInfSect(szSect$) = 0 then
  815.         n% = 2
  816.     else
  817.         n% = 0
  818.     end if
  819.     if n% > 0 then
  820.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  821.     end if
  822. '$endif ''DEBUG
  823.  
  824.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  825. '$ifdef DEBUG
  826.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  827. '$endif ''DEBUG
  828.         ERROR STFERR
  829.     END IF
  830. END SUB
  831.  
  832.  
  833. '*************************************************************************
  834. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  835. '$ifdef DEBUG
  836.     if szSym$ = "" then
  837.         n% = 1
  838.     elseif FValidInfSect(szSect$) = 0 then
  839.         n% = 2
  840.     else
  841.         n% = 0
  842.     end if
  843.     if n% > 0 then
  844.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  845.     end if
  846. '$endif ''DEBUG
  847.  
  848.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  849. '$ifdef DEBUG
  850.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  851. '$endif ''DEBUG
  852.         ERROR STFERR
  853.     END IF
  854. END SUB
  855.  
  856.  
  857. '*************************************************************************
  858. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  859. '$ifdef DEBUG
  860.     if szSym$ = "" then
  861.         n% = 1
  862.     elseif FValidInfSect(szSect$) = 0 then
  863.         n% = 2
  864.     else
  865.         n% = 0
  866.     end if
  867.     if n% > 0 then
  868.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  869.     end if
  870. '$endif ''DEBUG
  871.  
  872.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  873. '$ifdef DEBUG
  874.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  875. '$endif ''DEBUG
  876.         ERROR STFERR
  877.     END IF
  878. END SUB
  879.  
  880.  
  881. '*************************************************************************
  882. SUB InitInstall STATIC
  883.     IF hSetup > 0 THEN
  884. '$ifdef DEBUG
  885.         StfApiErr saeInit, "InitInstall", ""
  886. '$endif ''DEBUG
  887.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  888. '$ifdef DEBUG
  889.         StfApiErr saeFail, "InitInstall", ""
  890. '$endif ''DEBUG
  891.         END
  892.     END IF
  893. END SUB
  894.  
  895.  
  896. '*************************************************************************
  897. SUB CreateDir (szDir$, cmo%) STATIC
  898. '$ifdef DEBUG
  899.     if FValidFATDir(szDir$) = 0 then
  900.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  901.     end if
  902. '$endif ''DEBUG
  903.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  904. '$ifdef DEBUG
  905.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  906. '$endif ''DEBUG
  907.         ERROR STFERR
  908.     END IF
  909. END SUB
  910.  
  911.  
  912. '*************************************************************************
  913. SUB RemoveDir (szDir$, cmo%) STATIC
  914. '$ifdef DEBUG
  915.     if FValidFATDir(szDir$) = 0 then
  916.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  917.     end if
  918. '$endif ''DEBUG
  919.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  920. '$ifdef DEBUG
  921.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  922. '$endif ''DEBUG
  923.         ERROR STFERR
  924.     END IF
  925. END SUB
  926.  
  927.  
  928.  
  929. '*************************************************************************
  930. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  931. '$ifdef DEBUG
  932.     if FValidIniFile(szFile$) = 0 then
  933.         n% = 1
  934.     elseif FValidInfSect(szSect$) = 0 then
  935.         n% = 2
  936.     else
  937.         n% = 0
  938.     end if
  939.     if n% > 0 then
  940.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  941.     end if
  942. '$endif ''DEBUG
  943.  
  944.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  945. '$ifdef DEBUG
  946.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  947. '$endif ''DEBUG
  948.         ERROR STFERR
  949.     END IF
  950. END SUB
  951.  
  952.  
  953. '*************************************************************************
  954. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  955. '$ifdef DEBUG
  956.     if FValidIniFile(szFile$) = 0 then
  957.         n% = 1
  958.     elseif FValidInfSect(szSect$) = 0 then
  959.         n% = 2
  960.     elseif szKey$ = "" then
  961.         n% = 3
  962.     else
  963.         n% = 0
  964.     end if
  965.     if n% > 0 then
  966.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  967.     end if
  968. '$endif ''DEBUG
  969.  
  970.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  971. '$ifdef DEBUG
  972.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  973. '$endif ''DEBUG
  974.         ERROR STFERR
  975.     END IF
  976. END SUB
  977.  
  978.  
  979. '*************************************************************************
  980. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  981. '$ifdef DEBUG
  982.     if FValidIniFile(szFile$) = 0 then
  983.         n% = 1
  984.     elseif FValidInfSect(szSect$) = 0 then
  985.         n% = 2
  986.     elseif szKey$ = "" then
  987.         n% = 3
  988.     else
  989.         n% = 0
  990.     end if
  991.     if n% > 0 then
  992.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  993.     end if
  994. '$endif ''DEBUG
  995.  
  996.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  997. '$ifdef DEBUG
  998.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  999. '$endif ''DEBUG
  1000.         ERROR STFERR
  1001.     END IF
  1002. END SUB
  1003.  
  1004.  
  1005. '*************************************************************************
  1006. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1007. '$ifdef DEBUG
  1008.     if FValidFATPath(szFile$) = 0 then
  1009.         n% = 1
  1010.     elseif FValidInfSect(szSect$) = 0 then
  1011.         n% = 2
  1012.     elseif szKey$ = "" then
  1013.         n% = 3
  1014.     else
  1015.         n% = 0
  1016.     end if
  1017.     if n% > 0 then
  1018.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1019.     end if
  1020. '$endif ''DEBUG
  1021.  
  1022.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1023. '$ifdef DEBUG
  1024.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1025. '$endif ''DEBUG
  1026.         ERROR STFERR
  1027.     END IF
  1028. END SUB
  1029.  
  1030.  
  1031. '*************************************************************************
  1032. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1033. '$ifdef DEBUG
  1034.     if szGroup$ = "" or len(szGroup$) > 24 then
  1035.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1036.     end if
  1037. '$endif ''DEBUG
  1038.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1039. '$ifdef DEBUG
  1040.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1041. '$endif ''DEBUG
  1042.         ERROR STFERR
  1043.     END IF
  1044. END SUB
  1045.  
  1046.  
  1047. '*************************************************************************
  1048. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1049. '$ifdef DEBUG
  1050.     if szGroup$ = "" or len(szGroup$) > 24 then
  1051.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1052.     end if
  1053. '$endif ''DEBUG
  1054.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1055. '$ifdef DEBUG
  1056.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1057. '$endif ''DEBUG
  1058.         ERROR STFERR
  1059.     END IF
  1060. END SUB
  1061.  
  1062.  
  1063. '*************************************************************************
  1064. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1065. '$ifdef DEBUG
  1066.     if FValidInfSect(szSect$) = 0 then
  1067.         n% = 1
  1068.     elseif szKey$ = "" then
  1069.         n% = 2
  1070.     elseif FValidFATDir(szDst$) = 0 then
  1071.         n% = 3
  1072.     else
  1073.         n% = 0
  1074.     end if
  1075.     if n% > 0 then
  1076.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1077.     end if
  1078. '$endif ''DEBUG
  1079.  
  1080.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1081. '$ifdef DEBUG
  1082.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1083. '$endif ''DEBUG
  1084.         ERROR STFERR
  1085.     END IF
  1086. END SUB
  1087.  
  1088.  
  1089. '*************************************************************************
  1090. SUB DumpCopyList (szFile$) STATIC
  1091. '$ifdef DEBUG
  1092.     if szFile$ = "" then
  1093.         BadArgErr 1, "DumpCopyList", szFile$
  1094.     end if
  1095. '$endif ''DEBUG
  1096.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1097. '$ifdef DEBUG
  1098.         StfApiErr saeFail, "DumpCopyList", szFile$
  1099. '$endif ''DEBUG
  1100.         ERROR STFERR
  1101.     END IF
  1102. END SUB
  1103.  
  1104.  
  1105. '*************************************************************************
  1106. SUB ClearCopyList STATIC
  1107.     ResetCopyList
  1108. END SUB
  1109.  
  1110.  
  1111. '*************************************************************************
  1112. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1113.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1114.     IF lNeed& < 0 THEN
  1115. '$ifdef DEBUG
  1116.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1117. '$endif ''DEBUG
  1118.         ERROR STFERR
  1119.     END IF
  1120.     GetCopyListCost = lNeed&
  1121. END FUNCTION
  1122.  
  1123.  
  1124. '*************************************************************************
  1125. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1126.     szItemNew$ = szItem$
  1127.     IF szOther$ <> "" THEN
  1128.         szItemNew$ = szItem$ + "," + szOther$
  1129.     END IF
  1130. '$ifdef DEBUG
  1131.     if szGroup$ = "" or len(szGroup$) > 24 then
  1132.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1133.     end if
  1134. '$endif ''DEBUG
  1135.  
  1136.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1137. '$ifdef DEBUG
  1138.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1139. '$endif ''DEBUG
  1140.         ERROR STFERR
  1141.     END IF
  1142.     szItemNew$ = ""
  1143. END SUB
  1144.  
  1145.  
  1146. '*************************************************************************
  1147. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1148. '$ifdef DEBUG
  1149.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1150.         n% = 1
  1151.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1152.         n% = 1
  1153.     elseif szProgHelp$ = "" then
  1154.         n% = 2
  1155.     else
  1156.         n% = 0
  1157.     end if
  1158.     if n% > 0 then
  1159.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1160.     end if
  1161. '$endif ''DEBUG
  1162.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1163. '$ifdef DEBUG
  1164.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1165. '$endif ''DEBUG
  1166.         ERROR STFERR
  1167.     END IF
  1168. END SUB
  1169.  
  1170.  
  1171. '*************************************************************************
  1172. SUB CopyFilesInCopyList STATIC
  1173.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1174.  
  1175.     IF grc% = grcUserQuit THEN
  1176.         ERROR STFQUIT
  1177.     ELSEIF grc% > 0 THEN
  1178. '$ifdef DEBUG
  1179.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1180. '$endif ''DEBUG
  1181.         ERROR STFERR
  1182.     END IF
  1183. END SUB
  1184.  
  1185.  
  1186. '*************************************************************************
  1187. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1188. '$ifdef DEBUG
  1189.     if FValidFATPath(szFullPathSrc$) = 0 then
  1190.         n% = 1
  1191.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1192.         n% = 2
  1193.     else
  1194.         n% = 0
  1195.     end if
  1196.     if n% > 0 then
  1197.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1198.     end if
  1199. '$endif ''DEBUG
  1200.  
  1201.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1202. '$ifdef DEBUG
  1203.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1204. '$endif ''DEBUG
  1205.         ERROR STFERR
  1206.     END IF
  1207. END SUB
  1208.  
  1209.  
  1210.  
  1211. '*************************************************************************
  1212. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1213. '$ifdef DEBUG
  1214.     if FValidFATPath(szFullPathSrc$) = 0 then
  1215.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1216.     end if
  1217. '$endif ''DEBUG
  1218.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1219. '$ifdef DEBUG
  1220.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1221. '$endif ''DEBUG
  1222.         ERROR STFERR
  1223.     END IF
  1224. END SUB
  1225.  
  1226.  
  1227. '*************************************************************************
  1228. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1229. '$ifdef DEBUG
  1230.     if FValidFATPath(szFullPath$) = 0 then
  1231.         n% = 1
  1232.     elseif szBackup$ = "" then
  1233.         n% = 2
  1234.     else
  1235.         n% = 0
  1236.     end if
  1237.     if n% > 0 then
  1238.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1239.     end if
  1240. '$endif ''DEBUG
  1241.  
  1242.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1243. '$ifdef DEBUG
  1244.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1245. '$endif ''DEBUG
  1246.         ERROR STFERR
  1247.     END IF
  1248. END SUB
  1249.  
  1250.  
  1251. '*************************************************************************
  1252. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1253. '$ifdef DEBUG
  1254.     if FValidFATPath(szFullPath$) = 0 then
  1255.         n% = 1
  1256.     elseif szBackup$ = "" then
  1257.         n% = 2
  1258.     else
  1259.         n% = 0
  1260.     end if
  1261.     if n% > 0 then
  1262.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1263.     end if
  1264. '$endif ''DEBUG
  1265.  
  1266.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1267. '$ifdef DEBUG
  1268.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1269. '$endif ''DEBUG
  1270.         ERROR STFERR
  1271.     END IF
  1272. END SUB
  1273.  
  1274.  
  1275. '*************************************************************************
  1276. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1277. '$ifdef DEBUG
  1278.     if FValidInfSect(szSect$) = 0 then
  1279.         n% = 1
  1280.     elseif FValidFATDir(szSrc$) = 0 then
  1281.         n% = 2
  1282.     elseif FValidFATDir(szDest$) = 0 then
  1283.         n% = 3
  1284.     else
  1285.         n% = 0
  1286.     end if
  1287.     if n% > 0 then
  1288.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1289.     end if
  1290. '$endif ''DEBUG
  1291.  
  1292.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1293. '$ifdef DEBUG
  1294.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1295. '$endif ''DEBUG
  1296.         ERROR STFERR
  1297.     END IF
  1298. END SUB
  1299.  
  1300.  
  1301. '*************************************************************************
  1302. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1303. '$ifdef DEBUG
  1304.     if FValidInfSect(szSect$) = 0 then
  1305.         n% = 1
  1306.     elseif szKey$ = "" then
  1307.         n% = 2
  1308.     elseif FValidFATDir(szSrc$) = 0 then
  1309.         n% = 3
  1310.     elseif FValidFATDir(szDest$) = 0 then
  1311.         n% = 4
  1312.     else
  1313.         n% = 0
  1314.     end if
  1315.     if n% > 0 then
  1316.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1317.     end if
  1318. '$endif ''DEBUG
  1319.  
  1320.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1321. '$ifdef DEBUG
  1322.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1323. '$endif ''DEBUG
  1324.         ERROR STFERR
  1325.     END IF
  1326. END SUB
  1327.  
  1328.  
  1329. '*************************************************************************
  1330. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1331. '$ifdef DEBUG
  1332.     if FValidInfSect(szSect$) = 0 then
  1333.         n% = 1
  1334.     elseif szKey$ = "" then
  1335.         n% = 2
  1336.     elseif FValidFATDir(szSrc$) = 0 then
  1337.         n% = 3
  1338.     elseif FValidFATPath(szDest$) = 0 then
  1339.         n% = 4
  1340.     else
  1341.         n% = 0
  1342.     end if
  1343.     if n% > 0 then
  1344.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1345.     end if
  1346. '$endif ''DEBUG
  1347.  
  1348.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1349. '$ifdef DEBUG
  1350.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1351. '$endif ''DEBUG
  1352.         ERROR STFERR
  1353.     END IF
  1354. END SUB
  1355.  
  1356.  
  1357. '*************************************************************************
  1358. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1359. '$ifdef DEBUG
  1360.     if szDll$ = "" then
  1361.         n% = 1
  1362.     elseif idDlg% = 0 then
  1363.         n% = 2
  1364.     elseif szProc$ = "" then
  1365.         n% = 3
  1366.     elseif lTicks& <= 0 then
  1367.         n% = 4
  1368.     else
  1369.         n% = 0
  1370.     end if
  1371.     if n% > 0 then
  1372.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1373.     end if
  1374. '$endif ''DEBUG
  1375.  
  1376.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1377. '$ifdef DEBUG
  1378.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1379. '$endif ''DEBUG
  1380.         ERROR STFERR
  1381.     END IF
  1382. END SUB
  1383.  
  1384.  
  1385. '*************************************************************************
  1386. SUB AddBlankToBillboardList (lTicks&) STATIC
  1387. '$ifdef DEBUG
  1388.     if lTicks& <= 0 then
  1389.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1390.     end if
  1391. '$endif ''DEBUG
  1392.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1393. '$ifdef DEBUG
  1394.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1395. '$endif ''DEBUG
  1396.         ERROR STFERR
  1397.     END IF
  1398. END SUB
  1399.  
  1400.  
  1401. '*************************************************************************
  1402. SUB ClearBillboardList STATIC
  1403.     IF FClearBillboardList = 0 THEN
  1404. '$ifdef DEBUG
  1405.         StfApiErr saeFail, "ClearBillboardList", ""
  1406. '$endif ''DEBUG
  1407.         ERROR STFERR
  1408.     END IF
  1409. END SUB
  1410.  
  1411.  
  1412. '*************************************************************************
  1413. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1414. '$ifdef DEBUG
  1415.     if FValidFATPath(szFile$) = 0 then
  1416.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1417.     end if
  1418. '$endif ''DEBUG
  1419.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1420. '$ifdef DEBUG
  1421.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1422. '$endif ''DEBUG
  1423.         ERROR STFERR
  1424.     END IF
  1425. END SUB
  1426.  
  1427.  
  1428. '*************************************************************************
  1429. SUB CloseLogFile STATIC
  1430.     IF FCloseLogFile() = 0 THEN
  1431. '$ifdef DEBUG
  1432.         StfApiErr saeFail, "CloseLogFile", ""
  1433. '$endif ''DEBUG
  1434.         ERROR STFERR
  1435.     END IF
  1436. END SUB
  1437.  
  1438.  
  1439. '*************************************************************************
  1440. SUB WriteToLogFile (szStr$) STATIC
  1441.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1442. '$ifdef DEBUG
  1443.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1444. '$endif ''DEBUG
  1445.         ERROR STFERR
  1446.     END IF
  1447. END SUB
  1448.  
  1449.  
  1450. ''' -1 in either parameter will mean 'center in frame client area'
  1451. '*************************************************************************
  1452. SUB SetCopyGaugePosition (x%, y%) STATIC
  1453.     ProSetPos x%, y%
  1454. END SUB
  1455.  
  1456.  
  1457. '*************************************************************************
  1458. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1459.     szBuf$ = STRING$(512, 32)
  1460.  
  1461.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1462.     IF wRet% = 0 THEN
  1463.         FindFileUsingFileOpen = szBuf$
  1464.     ELSEIF wRet% = 1 THEN
  1465.         FindFileUsingFileOpen = ""
  1466.     ELSE
  1467. '$ifdef DEBUG
  1468.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1469. '$endif ''DEBUG
  1470.         ERROR STFERR
  1471.     END IF
  1472.  
  1473.     szBuf$ = ""
  1474. END FUNCTION
  1475.  
  1476.  
  1477. '*************************************************************************
  1478. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1479.     IsDirWritable = FIsDirWritable(szDir$)
  1480. END FUNCTION
  1481.  
  1482.  
  1483. '*************************************************************************
  1484. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1485. '$ifdef DEBUG
  1486.     if FValidFATDir(szFile$) = 0 then
  1487.         BadArgErr 1, "IsFileWritable", szFile$
  1488.     end if
  1489. '$endif ''DEBUG
  1490.     IsFileWritable = FIsFileWritable(szFile$)
  1491. END FUNCTION
  1492.  
  1493.  
  1494. '*************************************************************************
  1495. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1496.     IF iField% < 1 THEN
  1497. '$ifdef DEBUG
  1498.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1499. '$endif ''DEBUG
  1500.         ERROR STFERR
  1501.     END IF
  1502.     szStart$ = szLine$
  1503.     IF iField% <> 1 THEN
  1504.         FOR i% = 2 TO iField% STEP 1
  1505.             iNew% = INSTR(szStart$, ",")
  1506.             IF iNew% = 0 THEN
  1507.                 GetNthFieldFromIniString = ""
  1508.                 GOTO _GNFFIS_END
  1509.             END IF
  1510.             szStart$ = MID$(szStart$, (iNew% + 1))
  1511.         NEXT
  1512.     END IF
  1513.  
  1514.     iNew% = INSTR(szStart$, ",")
  1515.     IF iNew% <> 0 THEN
  1516.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1517.     END IF
  1518.  
  1519.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1520.  
  1521. _GNFFIS_END:
  1522.  
  1523. END FUNCTION
  1524.  
  1525.  
  1526. '*************************************************************************
  1527. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1528.     GetWindowsMajorVersion = GetVersion() MOD 256
  1529. END FUNCTION
  1530.  
  1531.  
  1532. '*************************************************************************
  1533. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1534.     GetWindowsMinorVersion = GetVersion() / 256
  1535. END FUNCTION
  1536.  
  1537.  
  1538. '*************************************************************************
  1539. FUNCTION GetWindowsMode STATIC AS INTEGER
  1540.     GetWindowsMode = 0
  1541.     longTmp& = GetWinFlags()
  1542.     IF longTmp& AND WF_STANDARD THEN
  1543.         GetWindowsMode = 1
  1544.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1545.         GetWindowsMode = 2
  1546.     END IF
  1547. END FUNCTION
  1548.  
  1549.  
  1550. '*************************************************************************
  1551. FUNCTION GetWindowsDir STATIC AS STRING
  1552.     szBuf$ = string$(256, 32)
  1553.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1554.  
  1555.     IF cbBuf% = 0 THEN
  1556.         GetWindowsDir = ""
  1557. '$ifdef DEBUG
  1558.         StfApiErr saeFail, "GetWindowsDir", ""
  1559. '$endif ''DEBUG
  1560.         ERROR STFERR
  1561.     ELSE
  1562.         IF cbBuf% > 255 THEN
  1563.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1564.             ERROR STFERR
  1565.         END IF
  1566.         szBuf$ = RTRIM$(szBuf$)
  1567.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1568.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1569.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1570.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1571.         END IF
  1572.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1573.             szBuf$ = szBuf$ + "\"
  1574.         END IF
  1575.         GetWindowsDir = szBuf$
  1576.     END IF
  1577.  
  1578.     szBuf$ = ""
  1579. END FUNCTION
  1580.  
  1581.  
  1582. '*************************************************************************
  1583. FUNCTION GetWindowsSysDir STATIC AS STRING
  1584.     szBuf$ = string$(256, 32)
  1585.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1586.  
  1587.     IF cbBuf% = 0 THEN
  1588. '$ifdef DEBUG
  1589.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1590. '$endif ''DEBUG
  1591.         ERROR STFERR
  1592.     ELSE
  1593.         IF cbBuf% > 255 THEN
  1594.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1595.             ERROR STFERR
  1596.         END IF
  1597.         szBuf$ = RTRIM$(szBuf$)
  1598.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1599.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1600.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1601.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1602.         END IF
  1603.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1604.             szBuf$ = szBuf$ + "\"
  1605.         END IF
  1606.         GetWindowsSysDir = szBuf$
  1607.     END IF
  1608.  
  1609.     szBuf$ = ""
  1610. END FUNCTION
  1611.  
  1612.  
  1613. '*************************************************************************
  1614. FUNCTION IsWindowsShared STATIC AS INTEGER
  1615.     szWin$ = UCASE$(GetWindowsDir())
  1616.     szSys$ = UCASE$(GetWindowsSysDir())
  1617.  
  1618.     IF len(szWin$) = 0 THEN
  1619. '$ifdef DEBUG
  1620.         StfApiErr saeFail, "IsWindowsShared", ""
  1621. '$endif ''DEBUG
  1622.         ERROR STFERR
  1623.     END IF
  1624.  
  1625.     IF len(szSys$) <= len(szWin$) THEN
  1626.         IsWindowsShared = 1
  1627.     ELSE
  1628.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1629.         IF szWin$ = szSys$ THEN
  1630.             IsWindowsShared = 0
  1631.         ELSE
  1632.             IsWindowsShared = 1
  1633.         END IF
  1634.     END IF
  1635. END FUNCTION
  1636.  
  1637.  
  1638. '*************************************************************************
  1639. FUNCTION GetScreenWidth STATIC AS INTEGER
  1640.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1641. END FUNCTION
  1642.  
  1643.  
  1644. '*************************************************************************
  1645. FUNCTION GetScreenHeight STATIC AS INTEGER
  1646.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1647. END FUNCTION
  1648.  
  1649.  
  1650. '*************************************************************************
  1651. SUB SetRestartDir (szDir$) STATIC
  1652. '$ifdef DEBUG
  1653.     if FValidFATDir(szDir$) = 0 then
  1654.         BadArgErr 1, "SetRestartDir", szDir$
  1655.     end if
  1656. '$endif ''DEBUG
  1657.     IF FSetRestartDir(szDir$) = 0 THEN
  1658. '$ifdef DEBUG
  1659.         StfApiErr saeFail, "SetRestartDir", szDir$
  1660. '$endif ''DEBUG
  1661.         ERROR STFERR
  1662.     END IF
  1663. END SUB
  1664.  
  1665.  
  1666. '*************************************************************************
  1667. FUNCTION RestartListEmpty STATIC AS INTEGER
  1668.     IF FRestartListEmpty() = 0 THEN
  1669.         RestartListEmpty = 0
  1670.     ELSE
  1671.         RestartListEmpty = 1
  1672.     END IF
  1673. END FUNCTION
  1674.  
  1675.  
  1676. '*************************************************************************
  1677. FUNCTION ExitExecRestart STATIC AS INTEGER
  1678.     ExitExecRestart = FExitExecRestart
  1679. END FUNCTION
  1680.  
  1681.  
  1682. '*************************************************************************
  1683. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1684.  
  1685. '$ifdef DEBUG
  1686.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1687.         n% = 1
  1688.     elseif FValidFATPath(szDst$) = 0 then
  1689.         n% = 2
  1690.     elseif FValidFATDir(szDir$) = 0 then
  1691.         n% = 3
  1692.     else
  1693.         n% = 0
  1694.     end if
  1695.     if n% > 0 then
  1696.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1697.     end if
  1698. '$endif ''DEBUG
  1699.  
  1700.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1701. '$ifdef DEBUG
  1702.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1703. '$endif ''DEBUG
  1704.         ERROR STFERR
  1705.     END IF
  1706. END SUB
  1707.  
  1708.  
  1709.  
  1710. '**************************************************************************
  1711. '***************************  Error Handlers  *****************************
  1712. '**************************************************************************
  1713.  
  1714.  
  1715. '$ifdef DEBUG
  1716. '**************************************************************************
  1717. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1718.     select case nMsg%
  1719.         case saeFail
  1720.             lpText$ = "Failed"
  1721.         case saeInit
  1722.             lpText$ = "Already Initialized"
  1723.         case saeNYI
  1724.             lpText$ = "NYI"
  1725.         case else
  1726.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1727.     end select
  1728.  
  1729.     lpText$ = lpText$ + ": "+ szApi$
  1730.     if szArgs$ <> "" then
  1731.         lpText$ = lpText + " (" + szArgs$ + ")"
  1732.     end if
  1733.     lpCaption$ = "MS-Setup Toolkit API Error"
  1734.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1735.     print lpText$
  1736.     lpText$ = ""
  1737.     lpCaption$ = ""
  1738. END SUB
  1739.  
  1740. '**************************************************************************
  1741. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1742.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1743.     ERROR STFERR
  1744. END SUB
  1745.  
  1746.  
  1747. '** REVIEW: Move this function into common lib (we'll need it there too)
  1748. '**************************************************************************
  1749. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1750.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1751.         FValidInfSect = 0
  1752.     else
  1753.         FValidInfSect = 1
  1754.     end if
  1755. END FUNCTION
  1756.  
  1757.  
  1758. '** REVIEW: Move this function into common lib (we'll need it there too)
  1759. '**************************************************************************
  1760. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1761.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1762.         FValidIniFile = 0
  1763.     else
  1764.         FValidIniFile = 1
  1765.     end if
  1766. END FUNCTION
  1767.  
  1768. '**************************************************************************
  1769. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1770.  
  1771.     if szDrive$ = "" then
  1772.         FValidDrive = 0
  1773.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1774.         FValidDrive = 1
  1775.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1776.         FValidDrive = 0
  1777.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1778.         FValidDrive = 0
  1779.     elseif LEN(szDrive$) = 1 then
  1780.         FValidDrive = 1
  1781.     elseif INSTR(2,szDrive$,":\") = 2 then
  1782.         FValidDrive = 1
  1783.     elseif INSTR(1,szDrive$,":") = 2 then
  1784.         FValidDrive = 1
  1785.     else
  1786.         FValidDrive = 0
  1787.     end if
  1788. END FUNCTION
  1789.  
  1790. '$endif ''DEBUG
  1791.  
  1792.  
  1793. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1794.  
  1795. End Trap
  1796.  
  1797. hSetup = InitSetup(COMMAND$)
  1798.  
  1799. ON ERROR GOTO QUIT
  1800.  
  1801.